Non-volatile storage devices are sensitive to input/output patterns. For example, in a flash storage device, excessive repeated writes to a given block of storage eventually will destroy an ability of the given block of storage to store data. Some existing non-volatile block storage devices employ wear leveling to spread out erasures across a range of logical block addresses (LBAs) in order to avoid, or reduce, a negative impact to the non-volatile block storage devices. However, existing non-volatile block storage devices, typically, do not provide feedback to processing devices regarding ongoing health of flash cells and input/output patterns employed by the processing device.
Currently, a storage controller of a processing device submits an input/output stream according to an input/output pattern designed into a storage subsystem component of an operating system executing on the processing device. The storage subsystem component may adjust some parameters of the input/output stream, such as, for example, buffer size, or other parameters. However, the storage subsystem component does not fully adapt the input/output pattern to a current status of a non-volatile block storage device.
Some designed storage subsystem components of operating systems treat a connected non-volatile block storage device as a black box. Such storage subsystem components may measure a responsiveness of the connected non-volatile block storage device and may perform minimal adaptive actions, such as, for example, varying a size of buffers and/or increasing a number of threads.